`timescale 1us/1ns

module PIEDecoder_testbench();
reg Clk,Rst;
reg Din;
wire [7:0] Dout;
wire D_en,F_en;

PIEDecoder uut(
    .Clk  (Clk  ),
    .Rst  (Rst  ),
    .Din  (Din  ),
    .Dout (Dout ),
    .D_en (D_en ),
    .F_en (F_en )
);



`define CLK_PERIORD 2
always #(`CLK_PERIORD/2) Clk=~Clk;

initial begin
    Clk=0;
    Rst=1;
    #2;
    Rst=0;
    #2;
    Rst=1;
end

initial begin
    Din=1;
    #10;
    ///SOF 001011101110101
    Din=0;
    #(10*`CLK_PERIORD);
    Din=1;
    #(5*`CLK_PERIORD);
    Din=0;
    #(5*`CLK_PERIORD);
    Din=1;
    #(15*`CLK_PERIORD);
    Din=0;
    #(5*`CLK_PERIORD);
    Din=1;
    ///
    /////////////////data1
    #(15*`CLK_PERIORD);
    Din=0;
    #(5*`CLK_PERIORD);
    Din=1;
    ////////////////data0
    #(5*`CLK_PERIORD);
    Din=0;
    #(5*`CLK_PERIORD);
    Din=1;
    ////////////////

    repeat(3)begin
        #(15*`CLK_PERIORD);
        Din=0;
        #(5*`CLK_PERIORD);
        Din=1;
        #(5*`CLK_PERIORD);
        Din=0;
        #(5*`CLK_PERIORD);
        Din=1;
    end

    repeat(2) begin
        #(5*`CLK_PERIORD);
        Din=0;
        #(5*`CLK_PERIORD);
        Din=1;
        #(5*`CLK_PERIORD);
        Din=0;
        #(5*`CLK_PERIORD);
        Din=1;
        #(5*`CLK_PERIORD);
        Din=0;
        #(5*`CLK_PERIORD);
        Din=1;
        #(15*`CLK_PERIORD);
        Din=0;
        #(5*`CLK_PERIORD);
        Din=1;
    end

    ///EOF
    Din=0;
    #(10*`CLK_PERIORD);
    Din=1;
    #(5*`CLK_PERIORD);
    Din=0;
    #(5*`CLK_PERIORD);
    Din=1;
    ///
    #300;
    $stop;
end

endmodule

